home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 4 / Amiga Tools 4.iso / tools / netzwerk / parnet-filesystem / netio2.c < prev    next >
C/C++ Source or Header  |  1996-02-26  |  2KB  |  92 lines

  1. /*
  2.  * $Id: netio2.c,v 1.2 1995/11/14 00:08:15 Rhialto Exp $
  3.  * $Log: netio2.c,v $
  4.  * Revision 1.2  1995/11/14  00:08:15  Rhialto
  5.  * #ifdef -> #if.
  6.  *
  7.  * Revision 1.1  1993/12/02  20:45:46  Rhialto
  8.  * Initial revision
  9.  *
  10.  *
  11.  * Network file system: network I/O for the server only.
  12.  * This version for PARNET.DEVICE.
  13.  */
  14.  
  15. #include "netfs.h"
  16. #include "devices/parnet.h"
  17.  
  18. #if DEBUG
  19. #   include "syslog.h"
  20. #else
  21. #   define    debug(x)
  22. #endif
  23.  
  24. Prototype LONG DoReply(struct IOParReq *io, Packet *pkt, ULONG size);
  25.  
  26. LONG
  27. DoReply(struct IOParReq *io, Packet *pkt, ULONG size)
  28. {
  29.     int         dest = pkt->p_Origin;
  30. #if DEBUG
  31.     int         try = 0;
  32. #endif
  33.     for(;;) {
  34. #if DEBUG
  35.     if (++try > 1)
  36.         debug(("*** DoReply try %d error %d len %d actual %d ->%d\n",
  37.              try, io->io_Error, size, io->io_Actual, dest));
  38. #endif
  39.     io->io_Command = CMD_WRITE;
  40.     io->io_Addr    = dest;
  41.     io->io_Data    = pkt;
  42.     io->io_Length  = size;
  43.     io->io_Data2   = NULL;
  44.     io->io_Length2 = 0;
  45.  
  46.     pkt->p_Type    = pt_Reply;
  47.     pkt->p_Origin  = MyAddr;
  48.  
  49.     if (DoIO((struct IORequest *)io) == 0)
  50.         break;
  51.     /* Be friendly - delay a bit */
  52.     Delay(2L);
  53.     if (SetSignal(0L, 0L) & SIGBREAKF_CTRL_C)
  54.         return io->io_Error;
  55.     }
  56.  
  57.     return 0;
  58. }
  59.  
  60. Prototype LONG DoReplyAsync(struct IOParReq *io, Packet *pkt, ULONG size);
  61.  
  62. LONG
  63. DoReplyAsync(struct IOParReq *io, Packet *pkt, ULONG size)
  64. {
  65.     int         dest = pkt->p_Origin;
  66. #if DEBUG
  67.     int         try = 0;
  68. #endif
  69.     for(;;) {
  70. #if DEBUG
  71.     if (++try > 1)
  72.         debug(("*** DoReply try %d error %d len %d actual %d\n",
  73.              try, io->io_Error, size, io->io_Actual));
  74. #endif
  75.     io->io_Command = CMD_WRITE;
  76.     io->io_Addr    = dest;
  77.     io->io_Data    = pkt;
  78.     io->io_Length  = size;
  79.     io->io_Data2   = NULL;
  80.     io->io_Length2 = 0;
  81.  
  82.     pkt->p_Type    = pt_AsyncReply;
  83.     pkt->p_Origin  = MyAddr;
  84.  
  85.     debug(("DoIO pt_AsyncReply to %d\n", io->io_Addr));
  86.     if (DoIO((struct IORequest *)io) == 0)
  87.         break;
  88.     if (SetSignal(0L, 0L) & SIGBREAKF_CTRL_C)
  89.         return io->io_Error;
  90.     }
  91. }
  92.